using OhioState.Math;

namespace OhioState.Physics
{
    /// <summary>
    /// IDynamicModel interface implemented by RigidBody
    /// </summary>
    public interface IDynamicModel
    {
        /// <summary>
        /// Get Position
        /// </summary>
        Vector3 Position
        { get; }
        /// <summary>
        /// Get Velocity
        /// </summary>
        Vector3 Velocity
        { get; }
        /// <summary>
        /// Get Maximum Velocity
        /// </summary>
        float MaximumVelocity
        { get; set; }
        /// <summary>
        /// Update Method
        /// </summary>
        /// <param name="time">time </param>
        /// <param name="elapsedSeconds"># of seconds elapsed</param>
        void Update(double time, double elapsedSeconds);
        /// <summary>
        /// Get Set Update Accessors 
        /// </summary>
        DynamicModelUpdateCommand Updater
        { get; set; }
        /// <summary>
        /// Set Position
        /// </summary>
        /// <param name="position">input position</param>
        void SetPosition(Vector3 position);
        /// <summary>
        /// Set Velociy
        /// </summary>
        /// <param name="velocity">input velocity</param>
        void SetVelocity(Vector3 velocity);
    }
}
